package com.note.chh.notebook.UI.base;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.inputmethod.InputMethodManager;

import com.blankj.utilcode.util.BarUtils;
import com.note.chh.notebook.Api.Constant;
import com.note.chh.notebook.MyApplication;
import com.note.chh.notebook.R;
import com.note.chh.notebook.Uitls.RudenessScreenHelper;
import com.note.chh.notebook.Uitls.TipUtils;
import com.note.chh.notebook.Uitls.UserUtil;
import com.qmuiteam.qmui.util.QMUIStatusBarHelper;
import com.qmuiteam.qmui.widget.QMUITopBar;

import butterknife.ButterKnife;

/**
 * cai BaseActivity封装
 */
public abstract class BaseActivity extends AppCompatActivity {
    public Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.context = getApplicationContext();
        if (savedInstanceState != null) {
            initParam(savedInstanceState);
        } else if (getIntent() != null && getIntent().getExtras() != null) {
            initParam(getIntent().getExtras());
        }
        checkNet();
        setContentView(bindLayout());
        ButterKnife.bind(this);
        initTopBar();
        initView();
        initData();
        initListener();
        MyApplication.instance.addActivity(this);
    }
    //初始化标题栏
    public void initTopBar(){

    }
    //得到当前界面的布局文件id(由子类实现)
    protected abstract int bindLayout();
    //初始化view
    public abstract void initView();
    //初始化数据
    public abstract void initData();
    //初始化监听事件
    public void initListener(){}
    //界面间跳转传参
    public void initParam(Bundle bundle){}
    //检查网络是否连接
    public void checkNet(){
        if (!UserUtil.isNetworkConnected(context)) {
            showToast(this,getResources().getString(R.string.noNet));
        }
    }
    //当关闭当前acitivity时，启动关闭动画
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        overridePendingTransition(R.anim.slide_still, R.anim.slide_out_right);
    }
    //是否隐藏状态栏 true显示  false隐藏
    public void statusBarVisible(boolean isvisible){
        BarUtils.setStatusBarVisibility(this,isvisible);
    }

    //沉浸状态栏
    public void QMUIStatusBar(Activity activity){
        QMUIStatusBarHelper.translucent(activity);
    }

//######################################################################################//
//#############################       消息土司      #####################################//
//######################################################################################//
    //显示消息土司，默认2秒
    public void showToast(Context context,String content){
        TipUtils.tipNormal(context,content);
    }
    //显示消息土司，自己定义时间
    public void showToast(Context context,String content,int second){
        TipUtils.tipTime(context,content,second);
    }
    //显示消息成功提示，一般用于上传成功、创建成功...,默认显示2秒
    public void showSuccess(Context context,String content){
       TipUtils.tipSuccess(context,content);
    }
    //显示消息失败提示,默认2秒
    public void showError(Context context,String content){
        TipUtils.tipError(context,content);
    }
    //显示消息警告提示，默认2秒
    public void showWarning(Context context,String content){
        TipUtils.tipWarning(context,content);
    }
    //显示加载动画
    public void showLoading(Context context,String content){
        TipUtils.tipLoading(context,content);
    }
    //关闭加载动画
    public void closeLoading(){
        TipUtils.tipColseLoading();
    }
//######################################################################################//
//#############################    显示与隐藏软键盘   #####################################//
//######################################################################################//
    //隐藏软件盘
    public void hideSoftInput() {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (getCurrentFocus() != null) {
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    }
    //显示软键盘
    public void showInputMethod(){
        if (getCurrentFocus() != null){
            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            imm.showSoftInputFromInputMethod(getCurrentFocus().getWindowToken(),0);
        }
    }
//######################################################################################//
//#############################      防止快速点击    #####################################//
//######################################################################################//
    //防止快速点击，默认1秒以内为快速点击
    private boolean fastClick() {
        long lastClick = 0;
        if (System.currentTimeMillis() - lastClick <= 1000) {
            return false;
        }
        lastClick = System.currentTimeMillis();
        return true;
    }
//######################################################################################//
//#############################       页面跳转      #####################################//
//######################################################################################//
    //不携带数据的页面跳转
    public void startActivity(Class<?> clz) {
        startActivity(clz, null);
    }
    //携带数据的页面跳转
    public void startActivity(Class<?> clz, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(this, clz);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }
    //不携带数据但有返回数据的页面跳转
    public void startActivityForResult(Class<?> clz, int requestCode) {
        startActivityForResult(clz, null,requestCode);
    }
    //携带数据也有返回数据的页面跳转
    public void startActivityForResult(Class<?> cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

    }
}
